﻿Public Class IsverenPrimBorcu2011 : Inherits Process

	Dim Borc As Prim.Borc.Borc
	Dim PesinatTarihi As Date

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Start("İşveren Taksitlendirme (2011)", "İşveren bilgisini girin.")
				AddSigortali()
				AddDate("odetar", "Ödeme tar.", "", YMD(Today))
				AddCombo("sube", "Şube", "1,Lefkoşa|2,Girne|3,Mağusa|4,İskele|5,Güzelyurt|6,Lefke", "nl", Window.CurrentLocalDepartment)
				StartBody()
				AddReport()
			Case EventType.ValidateForm
				If Check("Sigortali", IsEmpty("Sigortali"), "Sigortalı bilgisini girmelisiniz.") Then Exit Sub
				Tables.Clear()
				Tables.Add("sno", Sigortali.SnoAra(Remote, Input("Sigortali")))
				Rs = Hukuk.Af.GenelIsverenOku(Local, 2011, Input("Sigortali"))
				If Not Rs.EOF Then
					Dim Answer As String = Ask("Bu işverenin kaydı yapılmıştır. Ne yapmak istiyorsunuz?", "1|Ödeme planını göster;2|Ödeme planında değişiklik yap;3|Ödeme planını sil")
					If Answer = "" Then Focus("Sigortali") : Return
					If Answer = "1" Then
						Dim Process As New OdemePlaniRaporuIsveren2011
						Process.Arguments.Add("sno", Tables("sno")("sno"))
						Window.ClearAndLaunch(Process)
						Return
					ElseIf Answer = "2" Then
					ElseIf Answer = "3" Then
						If Not Confirm("Dikkat! Ödeme planını silerseniz, bu değişikliği geri alamazsınız. Devam etmek istediğinize emin misiniz?") Then Return
						Hukuk.Af.OdemePlaniSnoSil(Local, 2011, Input("Sigortali"))
						Info("Ödeme planı silinmiştir.")
						Close()
						Return
					End If
				Else
					Dim Text As String = ""
					Rs = Hukuk.Af.TaksitIsverenOku(Local, 2008, Input("Sigortali"))
					If Not Rs.EOF Then Text &= " ve 2008"
					Rs = Hukuk.Af.TaksitIsverenOku(Local, 2009, Input("Sigortali"))
					If Not Rs.EOF Then Text &= " ve 2009"
					If Text <> "" Then Warning("Bu işveren " & Mid(Text, 5) & " yılındaki aftan yararlanmıştır.")
					Rs = Hukuk.Af.CalismaDonemleriOku(Remote, Input("Sigortali"))
					If Not Rs.EOF Then Info("Bu işveren için çalışma dönemleri girilmiş. Sadece kayıtlı dönemler için hesaplama yapılacak.")
					Dim pesintar As Date = Input("odetar")
					Help = "Prim borcu hesaplanıyor..."
					Borc = Prim.Borc.HesaplaIsveren(Remote, Input("Sigortali"), Input("sube"), "1976/01/01", "2011/06/30", pesintar)
					If Borc.ErrorMessage <> "" Then
						Warning(Borc.ErrorMessage)
						ResetForm()
						Return
					End If
					If Borc.Aylar.Count = 0 Then
						Warning("Sigortalının ilgili dönemlere ait borcu bulunamadı.")
						Focus("Sigortali")
						Return
					End If
					Report.Begin()
					Help = "Prim borcu listelendi. Taksitlendirmeye devam etmek için Devam butonunu kullanın."
					Buttons.Show("Next.Reset")
				End If
				e.Result = True
			Case EventType.Save
				Dim Process As New IsverenPrimBorcu2011Secenekler
				Process.Borc = Borc
				Window.Launch(Process)
				'Process.Run(Window)
			Case EventType.PageHeader
				Report.EndBorders()
				Report.PrintReportInfo("İŞVEREN PRİM BORCU DÖKÜMÜ", Trim(Tables("sno")("adi")) & " " & Trim(Tables("sno")("soyadi")) & ", KİMLİK NO. : " & Trim(Tables("sno")("kimlik")) & ", ÖDEME TARİHİ: " & DMY(Borc.OdemeTarihi))
				Report.BeginBorders()
				Report.SetColumns("", "2;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;2;2", "c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;r;r;r", "---")
				Report.Print("<rs=2>Ay", "<rs=2>Bas", "<rs=2>T.S.", "<rs=2>Gün", "<cs=8>Yatırılan", "<cs=3>Geçici İşgör.", "<cs=8>Yatırılması Gereken")
				Report.Print("H", "H1", "D", "D1", "D2", "J", "E", "L", "Has.", "Ana.", "İşk.", "H", "H1", "J", "L", "T", "Anapara", "Ceza", "Toplam")
			Case EventType.ReportDetail
				Dim Toplam(3) As Decimal
				For Each Ay As Prim.Borc.Borc.Ay In Borc.Aylar.Values
					Report.Print(Ay.Tarih.ToString("yyyy/MM"), Fne(Ay.Basamak), Ay.Tehlike, Ay.CalisilanGun,
					 Fne(Ay.Prim("H")), Fne(Ay.Prim("H1")), Fne(Ay.Prim("D")), Fne(Ay.Prim("D1")), Fne(Ay.Prim("D2")), Fne(Ay.Prim("J")), Fne(Ay.Prim("E")), Fne(Ay.Prim("L")),
					 Fne(Ay.Rapor("has")), Fne(Ay.Rapor("ana")), Fne(Ay.Rapor("isk")),
					 Fne(Ay.Borc("H")), Fne(Ay.Borc("H1")), Fne(Ay.Borc("J")), Fne(Ay.Borc("L")), Fne(Ay.Borc("T")), Fm(Ay.Anapara), Fm(Ay.Ceza), Fm(Ay.Toplam))
					Toplam(0) += Ay.Anapara
					Toplam(1) += Ay.Ceza
					Toplam(2) += Ay.Toplam
				Next
				Report.Print("<cs=20>", Fm(Toplam(0)), Fm(Toplam(1)), Fm(Toplam(2)))
		End Select
	End Sub

End Class

Class IsverenPrimBorcu2011Secenekler : Inherits Process

	Public Borc As Prim.Borc.Borc
	Public donem1, donem2 As Input

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Start("İşveren Taksitlendirme (2011)", "Taksitlendirilecek dönem aralığını girin.")
				Dim List As String = ""
				For Each Donem In Borc.Donemler.Values
					List &= "|" & Donem.Donem
				Next
				donem1 = AddCombo("donem1", "Baş. dönem", Mid(List, 2), "", "--first--")
				donem2 = AddCombo("donem2", "Bit. dönem", Mid(List, 2), "nl", "--last--")
				StartBody()
				AddReport()
				Buttons.Show("Back")
			Case EventType.ValidateForm
				Af2011Genel.IndirimliCezaHesapla(Borc, donem1, donem2, Nothing, Nothing)
				Report.Begin()
				Help = "Ödeme seçenekleri listelenmiştir. Devam etmek için Devam butonunu kullanın."
				Buttons.Show("Next.Back")
				e.Result = True
			Case EventType.PageHeader
				Report.EndBorders()
				Report.PrintReportInfo("AF ÖDEME SEÇENEKLERİ", Trim(Tables("sno")("adi")) & " " & Trim(Tables("sno")("soyadi")) & ", KİMLİK NO. : " & Trim(Tables("sno")("kimlik")) & ", DÖNEM : " & donem1 & " -  " & donem2 & ", ÖDEME TARİHİ: " & DMY(Borc.OdemeTarihi))
				Report.BeginBorders()
				Report.SetColumns("", "1;1;1;1;1;1;1;1;1", "c;m;m;m;m;m;m;m;c", "--")
				Report.PrintTotal("<rs=2><c>Dönem", "<rs=2><c>Anapara", "<cs=2><c>Normal borç", "<cs=2><c>Peşin ödeme durumunda", "<cs=3><c>Taksitli ödeme durumunda")
				Report.PrintTotal("<r>Ceza", "<r>Toplam", "<r>Ceza", "<r>Toplam", "<r>Ceza", "<r>Toplam", "<c>P/T")
			Case EventType.ReportDetail
				Dim Toplam(9) As Decimal
				For Each Donem In Borc.Donemler.Values
					If Donem.Aktif Then
						Report.Print(Donem.Donem, Donem.Anapara, Donem.Ceza, Donem.Toplam,
						 Donem.Sum("p.ceza"), Donem.Anapara + Donem.Sum("p.ceza"),
						 Donem.Sum("t.ceza"), Donem.Anapara + Donem.Sum("t.ceza"), If(Donem.PesinDurumu = "P", "Peşin", ""))
						Toplam(0) += Donem.Anapara
						Toplam(1) += Donem.Ceza
						Toplam(2) += Donem.Toplam
						Toplam(3) += Donem.Sum("p.ceza")
						Toplam(4) += Donem.Anapara + Donem.Sum("p.ceza")
						Toplam(5) += Donem.Sum("t.ceza")
						Toplam(6) += Donem.Anapara + Donem.Sum("t.ceza")
						Toplam(7) += If(Donem.PesinDurumu = "P", Donem.Anapara + Donem.Sum("t.ceza"), 0)
						Toplam(8) += If(Donem.PesinDurumu = "T", Donem.Anapara + Donem.Sum("t.ceza"), 0)
					End If
				Next
				Report.PrintTotal("", Toplam(0), Toplam(1), Toplam(2), Toplam(3), Toplam(4), Toplam(5), Toplam(6), "")
				Report.SkipLine()
				Report.EndBorders()
				Report.Print("<cs=9><l>NORMAL ANAPARA VE CEZA TOPLAM TUTARI : " & Fm(Toplam(2), "TL"))
				Report.Print("<cs=9><l>PEŞİN ÖDEME SEÇENEĞİ İLE ÖDENECEK TUTAR : " & Fm(Toplam(4), "TL"))
				Report.Print("<cs=9><l>TAKSİTLİ ÖDEME SEÇENEĞİ İLE ÖDENECEK TUTAR : " & Fm(Toplam(6), "TL") & " (Peşin " & Fm(Toplam(7), "TL") & ", taksitle " & Fm(Toplam(8), "TL") & ")")
			Case EventType.Save
				Dim Answer As String = Ask("Ne yapmak istiyorsunuz?",
				 "T|Taksitli ödeme seçeneği ile devam edilsin.;" &
				 "P|Peşin ödeme seçeneği ile devam edilsin.;" &
				 "Q|Taksitli tutarla peşin seçeneği ile devam edilsin.;" &
				 "x|İşlem iptal edilsin.")
				Select Case Answer
					Case "" : Return
					Case "x" : Close() : Return
					Case "P" : PesinKaydet(1)
					Case "Q" : PesinKaydet(2)
					Case "T" : TaksitliKaydet()
				End Select
		End Select
	End Sub

	Sub PesinKaydet(Type As Integer)
		If Not Confirm("Sigortalı borcunu peşin ödeme suretiyle aftan yararlandırılacak. Devam etmek istediğinize emin misiniz?") Then Return
		For Each Donem In Borc.Donemler.Values
			If Donem.Aktif Then
				Donem.OdemeTarihi = Today.Date
				Donem.PesinDurumu = "P"
				For Each Ay In Donem.Aylar
					For Each Bordro In Ay.Bordrolar
						Bordro.indceza = If(Type = 1, Bordro.temp("p.ceza"), Bordro.temp("t.ceza"))
					Next
				Next
			End If
		Next
		Hukuk.Af.KaydetIsveren(Local, "2011", Tables("sno")("sno"), Borc, User.Kaykul)
		Info("Ödeme planı kaydedildi.")
		Dim Process As New OdemePlaniRaporuIsveren2011
		Process.Arguments.Add("sno", Tables("sno")("sno"))
		Window.ClearAndLaunch(Process)
	End Sub

	Sub TaksitliKaydet()
		For Each Donem In Borc.Donemler.Values
			If Donem.Aktif Then
				For Each Ay In Donem.Aylar
					For Each Bordro In Ay.Bordrolar
						Bordro.indceza = Bordro.temp("t.ceza")
					Next
				Next
			End If
		Next
		Dim Process As New TaksitDagitimi
		For Each Donem In Borc.Donemler.Values
			If Donem.Aktif And Donem.PesinDurumu = "T" Then
				Process.Borc.Add(Donem.Anapara + Donem.Sum("t.ceza"))
			End If
		Next
		Window.Launch(Process, True)
	End Sub

	Sub Kaydet(Taksitler As SortedList(Of Date, Integer))
		Dim i As Integer = -1, c As Integer = 0, d As Date
		For Each Donem In Borc.Donemler.Values
			Donem.OdemeTarihi = Today.Date
			If Donem.Aktif Then
				If Donem.PesinDurumu = "P" Then
					Donem.OdemeTarihi = Borc.OdemeTarihi
				Else
					If c = 0 Then
						i += 1
						c = Taksitler.Values(i)
						d = Taksitler.Keys(i)
					End If
					c -= 1
					Donem.OdemeTarihi = d
				End If
			End If
		Next
		Hukuk.Af.KaydetIsveren(Local, "2011", Tables("sno")("sno"), Borc, User.Kaykul)
		Info("Ödeme planı kaydedildi.")
		Dim Process As New OdemePlaniRaporuIsveren2011
		Process.Arguments.Add("sno", Tables("sno")("sno"))
		Window.ClearAndLaunch(Process)
	End Sub

End Class


